import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:sharecommmunit/utils/eventbus.dart';
import 'package:sharecommmunit/utils/http.dart';
import 'package:sharecommmunit/utils/toast.dart';
// 新增导入
import 'dart:typed_data';
import 'package:flutter/foundation.dart' show kIsWeb;

class ProfilePage extends StatefulWidget {
  const ProfilePage({super.key, required this.userInfo});

  final Map userInfo;

  @override
  State<ProfilePage> createState() => _ProfilePageState();
}

class _ProfilePageState extends State<ProfilePage> {
  Map userInfo = {"avatar": "", "nickName": ""};
  final TextEditingController _avatarController = TextEditingController();

  @override
  void initState() {
    super.initState();
    setState(() {
      userInfo = widget.userInfo;
      _avatarController.text = userInfo['nickName'];
    });
  }

  // 从相机或相册中选择图片
  selectAvatar() {
    showModalBottomSheet(
      context: context,
      builder: (context) {
        return SizedBox(
          height: 200,
          child: Column(
            children: [
              ListTile(
                leading: const Icon(Icons.camera_alt),
                title: const Text('拍照'),
                onTap: () {},
              ),
              ListTile(
                leading: const Icon(Icons.photo),
                title: const Text('相册'),
                onTap: () {
                  _pickImageFromGallery();
                },
              ),
            ],
          ),
        );
      },
    );
  }

  Future<void> _pickImageFromGallery() async {
    final picker = ImagePicker();
    final pickedFile = await picker.pickImage(source: ImageSource.gallery);
    if (pickedFile != null) {
      try {
        FormData formData;
        if (kIsWeb) {
          // Web 端
          Uint8List bytes = await pickedFile.readAsBytes();
          formData = FormData.fromMap({
            "file": MultipartFile.fromBytes(bytes, filename: pickedFile.name),
            "type": "avatar",
          });
        } else {
          // 移动端
          formData = FormData.fromMap({
            "file": await MultipartFile.fromFile(pickedFile.path),
            "type": "avatar",
          });
        }
        var res = await http.post('/upload', formData);
        if (res['code'] != 10000) return ToastUtil.showError('上传图片失败!');
        setState(() {
          userInfo['avatar'] = res['data']['url'];
        });
      } finally {
        Navigator.pop(context);
      }
    }
  }

  // 更新昵称
  updateNickName() async {
    if (_avatarController.text.isEmpty) {
      return ToastUtil.showError('昵称不能为空!');
    }
    try {
      await http.put('/userInfo', {"nickName": _avatarController.text});
      setState(() {
        userInfo['nickName'] = _avatarController.text;
        ToastUtil.showSuccess('修改成功!');
      });
    } catch (e) {
      return ToastUtil.showError('网络异常!');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: const Text('个人信息'),
        backgroundColor: Colors.transparent,
        centerTitle: true,
        leading: IconButton(
          onPressed: () {
            eventBus.fire(RefreshMine());
            Navigator.pop(context);
          },
          icon: const Icon(Icons.arrow_back),
        ),
      ),
      body: ListView(
        padding: const EdgeInsets.all(10),
        children: [
          SizedBox(
            height: 40,
            child: Row(
              children: [
                const Text('头像', style: TextStyle(fontSize: 16)),
                const Spacer(),
                GestureDetector(
                  onTap: () {
                    selectAvatar();
                  },
                  child: Row(
                    children: [
                      ClipRRect(
                        borderRadius: BorderRadius.circular(50.0),
                        child:
                            userInfo['avatar'] != ''
                                ? Image.network(
                                  userInfo['avatar'],
                                  width: 30,
                                  height: 30,
                                )
                                : Image.asset(
                                  'images/avatar_1.jpg',
                                  width: 30,
                                  height: 30,
                                ),
                      ),
                      const Icon(Icons.arrow_forward_ios, size: 12),
                    ],
                  ),
                ),
              ],
            ),
          ),
          Row(
            children: [
              Text('昵称'),
              Spacer(),
              Expanded(
                child: TextField(
                  controller: _avatarController,
                  decoration: InputDecoration(
                    hintText: '请输入昵称',
                    border: InputBorder.none,
                  ),
                  onEditingComplete: () {
                    updateNickName();
                  },
                  textAlign: TextAlign.right,
                ),
              ),
              Icon(Icons.arrow_forward_ios, size: 12),
            ],
          ),
        ],
      ),
    );
  }
}
